package com.ktjy.temp.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * 封装RestTemplate调用的方法
 */
@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 发送GET请求
     *
     * @param url          请求URL
     * @param responseType 返回类型
     * @param <T>          泛型类型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> sendGetRequest(String url, Class<T> responseType) {
        return restTemplate.getForEntity(url, responseType);
    }

    /**
     * 发送带参数的GET请求
     *
     * @param url          请求URL
     * @param params       请求参数
     * @param responseType 返回类型
     * @param <T>          泛型类型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> sendGetRequest(String url, Map<String, ?> params, Class<T> responseType) {
        return restTemplate.getForEntity(url, responseType, params);
    }

    /**
     * 发送POST请求
     *
     * @param url          请求URL
     * @param requestBody  请求体
     * @param responseType 返回类型
     * @param <T>          泛型类型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> sendPostRequest(String url, Object requestBody, Class<T> responseType) {
        return restTemplate.postForEntity(url, requestBody, responseType);
    }

    /**
     * 发送带自定义头的HTTP请求
     *
     * @param url          请求URL
     * @param method       HTTP方法
     * @param requestBody  请求体
     * @param headers      请求头
     * @param responseType 返回类型
     * @param <T>          泛型类型
     * @return 响应实体
     */
    public <T> ResponseEntity<T> sendRequestWithHeaders(String url, HttpMethod method, Object requestBody, Map<String, String> headers, Class<T> responseType) {
        HttpHeaders httpHeaders = new HttpHeaders();
        headers.forEach(httpHeaders::add);

        HttpEntity<Object> entity = new HttpEntity<>(requestBody, httpHeaders);
        return restTemplate.exchange(url, method, entity, responseType);
    }
}